//
//  ZLFireworksController.m
//  ZLSpecificAnimations
//
//  Created by ZL on 2017/5/5.
//  Copyright © 2017年 ZL. All rights reserved.
//

#import "ZLFireworksController.h"

@interface ZLFireworksController ()

@property (nonatomic, strong) CAEmitterLayer *caELayer;

@end

@implementation ZLFireworksController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blackColor];
    
    [self setupFireworks];
}

/**
 * 设置烟花
 */
- (void)setupFireworks {
    
    self.caELayer = [CAEmitterLayer layer];
    
    // 发射源
    self.caELayer.emitterPosition = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height - 50);
    // 发射源尺寸大小
    self.caELayer.emitterSize = CGSizeMake(50, 0);
    // 发射源模式
    self.caELayer.emitterMode = kCAEmitterLayerOutline;
    // 发射源的形状
    self.caELayer.emitterShape = kCAEmitterLayerLine;
    // 渲染模式
    self.caELayer.renderMode = kCAEmitterLayerAdditive;
    // 发射方向
    self.caELayer.velocity = 1;
    // 随机产生粒子
    self.caELayer.seed = (arc4random() % 100) + 1;
    
    // cell
    CAEmitterCell *cell = [CAEmitterCell emitterCell];
    // 速率
    cell.birthRate = 1.0;
    // 发射的角度
    cell.emissionRange = 0.11 * M_PI;
    // 速度
    cell.velocity = 300;
    // 范围
    cell.velocityRange = 150;
    // Y轴 加速度分量
    cell.yAcceleration = 75;
    // 声明周期
    cell.lifetime  = 2.04;
    // 是个CGImageRef的对象,既粒子要展现的图片
    cell.contents = (id)[[UIImage imageNamed:@"ring"] CGImage];
    // 缩放比例
    cell.scale = 0.2;
    // 粒子的颜色
    cell.color = [[UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1.0] CGColor];
    // 一个粒子的颜色green 能改变的范围
    cell.greenRange = 1.0;
    // 一个粒子的颜色red 能改变的范围
    cell.redRange = 1.0;
    // 一个粒子的颜色blue 能改变的范围
    cell.blueRange = 1.0;
    // 子旋转角度范围
    cell.spinRange = M_PI;
    
    // 爆炸
    CAEmitterCell *burst = [CAEmitterCell emitterCell];
    // 粒子产生系数
    burst.birthRate = 1.0;
    // 速度
    burst.velocity = 0;
    // 缩放比例
    burst.scale = 2.5;
    // shifting粒子red在生命周期内的改变速度
    burst.redSpeed = -1.5;
    // shifting粒子blue在生命周期内的改变速度
    burst.blueSpeed= +1.5;
    // shifting粒子green在生命周期内的改变速度
    burst.greenSpeed = +1.0;
    // 生命周期
    burst.lifetime = 0.35;
    
    
    // 火花 and finally, the sparks
    CAEmitterCell *spark = [CAEmitterCell emitterCell];
    // 粒子产生系数，默认为1.0
    spark.birthRate = 400;
    // 速度
    spark.velocity = 125;
    // 360 deg //周围发射角度
    spark.emissionRange = 2 * M_PI;
    // gravity //y方向上的加速度分量
    spark.yAcceleration = 75;
    // 粒子生命周期
    spark.lifetime = 3;
    // 是个CGImageRef的对象,既粒子要展现的图片
    spark.contents = (id)
    [[UIImage imageNamed:@"fireworks"] CGImage];
    // 缩放比例速度
    spark.scaleSpeed = -0.2;
    // 粒子green在生命周期内的改变速度
    spark.greenSpeed = -0.1;
    // 粒子red在生命周期内的改变速度
    spark.redSpeed = 0.4;
    // 粒子blue在生命周期内的改变速度
    spark.blueSpeed = -0.1;
    // 粒子透明度在生命周期内的改变速度
    spark.alphaSpeed = -0.25;
    // 子旋转角度
    spark.spin = 2 * M_PI;
    // 子旋转角度范围
    spark.spinRange = 2 * M_PI;
    
    self.caELayer.emitterCells = [NSArray arrayWithObject:cell];
    cell.emitterCells = [NSArray arrayWithObjects:burst, nil];
    burst.emitterCells = [NSArray arrayWithObject:spark];
    [self.view.layer addSublayer:self.caELayer];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
